export default {
    // 开启命名空间
    namespaced: true,

    // 模块化数据
    state: () => {
        // 购物车的数组，用来存储购物车中每个商品的信息对象
        // 确保从本地存储读取的数据正确转换为数组
        let cartData = uni.getStorageSync('cart');
        // 处理可能的序列化问题，尝试解析JSON字符串
        if (typeof cartData === 'string' && cartData) {
            try {
                cartData = JSON.parse(cartData);
            } catch (e) {
                // 如果解析失败，重置为一个空数组
                cartData = [];
            }
        }
        // 确保返回的是数组
        if (!Array.isArray(cartData)) {
            cartData = [];
        }
        return {
            cart: cartData
        }
    },

    // 规则
    mutations: {
        addToCart(state, goods) {
            // 先查找是否已经有这个商品
            const findResult = state.cart.find((x) => {
                // 当页面的id=外界穿过来的id相等 就说明存在这一项
                return x.goods_id === goods.goods_id
            })

            // 如果不存在就添加这个商品
            if (!findResult) {
                state.cart.push(goods)
            } else {
                // 存在则商品数量加1，使用正确的属性名
                findResult.goods_count++
            }
            // 每次添加商品后都要调用持久化存储
            this.commit('m_cart/saveToStorage')
        },
        // 持久化存储
        saveToStorage(state) {
            uni.setStorageSync('cart', state.cart)
        },
        updateGoodsState(state, goods) {
            // 先查找是否已经有这个商品
            const findResult = state.cart.find((x) => {
                // 当页面的id=外界穿过来的id相等 就说明存在这一项
                return x.goods_id === goods.goods_id
            })
            if (findResult) {
                findResult.goods_state = goods.goods_state
                // 每次勾选后都要调用持久化存储
                this.commit('m_cart/saveToStorage')
            }
        },
        updateGoodsCount(state, goods) {
            // 查找要更新的商品
            const findResult = state.cart.find((x) => {
                return x.goods_id === goods.goods_id
            })
            if (findResult) {
                // 更新商品数量
                findResult.goods_count = goods.goods_count
                // 调用持久化存储
                this.commit('m_cart/saveToStorage')
            }
        },
        removeGoodsById(state, goods_id) {
            // 过滤出所有商品ID不等于传入ID的商品
            state.cart = state.cart.filter(x => x.goods_id !== goods_id)
            // 每次删除商品后都要调用持久化存储
            this.commit('m_cart/saveToStorage')
        },
        updateAllGoodsState(state, newState) {
            //更新购物车中所有的全选状态
            state.cart.forEach((x) => {
                x.goods_state = newState
            })
            this.commit('m_cart/saveToStorage')
        }

    },
    // 获取器
    getters: {
        // 计算购物车中所有商品的总数（不管是否选中）
        total(state) {
            return state.cart.reduce((total, item) => total += item.goods_count, 0)
        },
        // 所有已勾选的总数量
        checkoutCount(state) {
            return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
        },
        // 已勾选的商品总价格
        checkoutGoodsAmount(state) {
            return state.cart.filter(x => x.goods_state).reduce((total, item) => {
                return total += item.goods_count * item.goods_price
            }, 0).toFixed(2)
        }
    }
}